package singleton;

/**
 * 静态内部类
 * 原理:根据静态内部类的特性(外部类的加载不影响内部类),同时解决了按需加载,线程安全,简洁;
 * 1.在静态内部类里创建单例,在装载该内部类的时候才会创建单例
 * 2.线程安全,类是jvm加载的,一个类只能加载一次
 * 缺点: 反射可以破坏单例,看下一个案例
 *
 * @author 1
 * @version 1.0
 * @description: TODO
 * @date 2024-08-23 16:24
 */
public class Singleton_05 {
    /**
     * 静态内部类,当没有方法调用的时候,该类不会自动加载
     */
    private static class SingletonHandler {
        private static Singleton_05 instance = new Singleton_05();
    }

    /**
     * 私有构造
     */
    private Singleton_05 (){
        //这个构造方法的判断是防止暴力反射获取实例对象
//        if (SingletonHandler.instance != null) {
//            throw new RuntimeException("非法访问!!!");
//        }
    }

    /**
     * 获取单例入口
     *
     * @return
     */
    public static Singleton_05 getInstance() {
        //调用内部类的时候,jvm会加载该类,而且只会加载一次
        return SingletonHandler.instance;
    }


}
